#pragma once
#ifndef Game_Common_ICollection_h
#define Game_Common_ICollection_h

namespace Game {
namespace Common {

template<typename T>
class ICollection {
public:
    virtual ~ICollection() = 0 {};
    virtual int GetCount() = 0;
    virtual void Add(T item) = 0;
    virtual void Clear() = 0;
    virtual T GetItem(int index) = 0;
    virtual int IndexOf(T item) = 0;
    virtual bool Remove(T item) = 0;
    virtual void RemoveAt(int index) = 0;
};

template <typename T>
class ICollectionIterator {
public:
    virtual ~ICollectionIterator() = 0 {};
    virtual void operator ++() = 0;
    virtual void operator ++(int) = 0;
    virtual bool operator ()() = 0;
    virtual T operator *() = 0;
};

}
}

#endif